﻿using System;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.Collections.Generic;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Common.Validation;
using Sinacor.UI.Bovespa.Ordens.Communication;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Titulo.Titulo;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem;
using Sinacor.UI.Bovespa.Ordens.Model;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Calendario.Calendario;

namespace Sinacor.UI.Bovespa.Ordens.Presenter
{
    public class PesquisaTituloPresenter : BasePresenter<IBaseView>
    {
        private IPesquisaTitulo _view;
        private Sinacor.UI.Bovespa.Ordens.Communication.Ordem _comunicacaoOrdem;
        private Bovespa.Ordens.Communication.Titulo _comunicacaoTitulo;
        private Sinacor.UI.Bovespa.Ordens.Communication.Calendario _comunicacaoCalendario;

        public PesquisaTituloPresenter(IPesquisaTitulo view): base((IBaseView)view)
        {
            this._view = view;
        }

        #region Carregar Titulos

        /// <summary>
        /// Data : 25/03/2008
        /// Autor: Eduardo Sertorio - esertorio
        /// Obs. : Adequacao ARQVPC
        /// </summary>
        /// <param name="model"></param>
        public void CarregarTitulos(Bovespa.Ordens.Model.Titulo model) //renomedo de ModelTitulos para ModelTitulo - esertorio - 200803202033 - ref issue ID0001485
        {
            ModelCollection<Model.Titulo> retorno = null; //alterado de TituloResponse para ModelTitulo - adequacao ARQVPC - esertorio - 200803251107 - ref issue ID0001485
            //ConsultarTitulosRequest filtro = null; //excluido - adequacao ARQVPC - esertorio - 200803251107 - ref issue ID0001485
            try
            {
                this._comunicacaoTitulo = new Sinacor.UI.Bovespa.Ordens.Communication.Titulo(this.Session);

                //excluido codigo que tranformava ModelTitulo em ConsultarTitulosRequest - adequacao ARQVPC - esertorio - 200803251108 - ref issue ID0001485

                retorno = this._comunicacaoTitulo.ConsultarTitulos(model);
                //TODO: Ptruiz.gp - Exibir Mensagem
                if (retorno == null || retorno.Count == 0)
                    this._view.ExibirMensagem(Model.Enum.Mensagem.SemRetorno);
                else
                    this._view.ExibirTitulo(retorno);
                
                 
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }    
        }
        #endregion

        #region Carregar Mercado

        /// <summary>
        /// Data : 25/03/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Adequacao ARQVPC - utilizar Model ao inves de DataContract entre Presenter e Communication
        /// </summary>
        public void CarregarMercado()
        {
            List<Model.Mercado> retorno = null;
            try
            {
                this._comunicacaoOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);
                retorno = this._comunicacaoOrdem.ConsultarMercado();

                this._view.ExibirMercado(retorno);
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
            
        }
        #endregion

        #region Validação de Parametros de Pesquisa
        //TODO: Ptruiz.gp - Método para validação de parametros de pesquisa
        public bool Validation()
        {
            bool retorno = true;
            return retorno;
        }
        #endregion

        #region Tradução de Enum em Response do Combo

        /// <summary>
        /// Traduzir o valor da Model para o Tipo Enum Mercado do Response
        /// </summary>
        /// <param name="item"></param>
        /// <user>Mazevedo</user>
        /// 
        /// Data : 19/03/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Alteracao do namespace do retorno para tipo compativel com os items carregados na Combo.
        public object TraduzirEnumModel(Bovespa.Ordens.Model.Enum.TipoMercado item)
        {
            //return (Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem.TipoMercado?)item;
            switch (item)
            {
                case Model.Enum.TipoMercado.BOX:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.BOX; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.BOX; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.Vista:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.Vista; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.Vista; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.OpcaoCompra:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoCompra; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.OpcaoCompra; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.OpcaoVenda:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoVenda; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.OpcaoVenda; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoCompra; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.ExercicioOpcaoCompra; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoVenda; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.ExercicioOpcaoVenda; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.Fracionario:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.Fracionario; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.Fracionario; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.Estruturado:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.Estruturado; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.Estruturado; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.Leilao:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.Leilao; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.Leilao; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.Termo:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.Termo; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.Termo; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.LeilaoNaoCotados:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.LeilaoNaoCotados; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.LeilaoNaoCotados; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.Futuro:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.Futuro; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.Futuro; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.VencimentoFuturo:
                    //return Communication.Bovespa.Ordens.Negocio.TipoMercado.VencimentoFuturo; //excluido - esertorio - 200803191834
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.VencimentoFuturo; //incluido - esertorio - 200803191834
                case Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.IntegralizacaoResgateCotas;
                case Model.Enum.TipoMercado.CotasETF:
                    return Communication.Bovespa.Ordens.Ordem.TipoMercado.CotasETF;
                default:
                    return null;
            }
        }

        /// <summary>
        /// Data:18/02/2008 18:34
        /// Autor:DMilanez.7Comm
        /// Obs: Criacao de sobrecarga do metodo
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public object TraduzirEnumModel( Bovespa.Ordens.Model.Enum.TipoMercado? item)
        {
            if (item.HasValue)
                return TraduzirEnumModel(item.Value);
            else
                return null;
        }

        #endregion

        #region CarregarDataMovimento
        public void CarregarDataMovimento()
        {
            CalendarioResponse retorno = null;
            try
            {
                this._comunicacaoCalendario = new Sinacor.UI.Bovespa.Ordens.Communication.Calendario(this.Session);
                retorno = this._comunicacaoCalendario.ConsultarDataMovimento();
                if (retorno != null)
                    this._view.AtualizarDataMovimento(retorno.DataPregao);
            }

            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
        #endregion

    }
}